{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "from langchain_community.chat_models import ChatTongyi\n",
    "from dotenv import load_dotenv"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "load_dotenv(dotenv_path='.qwen')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "chat = ChatTongyi(model=\"qwen-max\", top_p=0.8, temperature=0.1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "AIMessage(content='我是Qwen，由阿里云开发的预训练语言模型。我的目的是帮助用户获得准确、有用的信息，并促进积极向上的对话。有什么我可以帮到你的吗？', additional_kwargs={}, response_metadata={'model_name': 'qwen-max', 'finish_reason': 'stop', 'request_id': '193896c1-b0c8-97a1-af97-8b726ff92273', 'token_usage': {'input_tokens': 11, 'output_tokens': 37, 'total_tokens': 48}}, id='run-5d973f6d-552f-49b5-bca2-f785db003607-0')"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "chat.invoke(\"你是谁？\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 常量消息定义\n",
    "from langchain_core.messages import AIMessage, HumanMessage, SystemMessage"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [],
   "source": [
    "from langchain_core.prompts import SystemMessagePromptTemplate\n",
    "from langchain_core.prompts import HumanMessagePromptTemplate\n",
    "# 总模板\n",
    "from langchain_core.prompts import ChatPromptTemplate  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [],
   "source": [
    "# sys_msg = SystemMessage(content=\"你是一位资深投资经理.\") \n",
    "sys_msg = SystemMessagePromptTemplate.from_template(template=\"你是一个资深投资专家！\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "SystemMessagePromptTemplate(prompt=PromptTemplate(input_variables=[], input_types={}, partial_variables={}, template='你是一个资深投资专家！'), additional_kwargs={})"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sys_msg"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [],
   "source": [
    "# user_input 改为变量，拼接字符串，text文本框内容，传入\n",
    "user_msg = HumanMessage(content=\"\"\"\n",
    "    资深投资经理将根据用户的需求提供专业的投资建议。\n",
    "    用户输入为: {user_input}\n",
    "    \"\"\")\n",
    "\n",
    "user_msg = HumanMessagePromptTemplate.from_template(template=\"\"\"\n",
    "    资深投资经理根据用户的需求提供专业的投资建议。\n",
    "    用户输入为: {user_input}\n",
    "    投资建议为：\n",
    "\"\"\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [],
   "source": [
    "messages = [sys_msg, user_msg] "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [],
   "source": [
    "prompt = ChatPromptTemplate.from_messages(messages=messages)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'System: 你是一个资深投资专家！\\nHuman: \\n    资深投资经理根据用户的需求提供专业的投资建议。\\n    用户输入为: 海康威视\\n    投资建议为：\\n'"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "prompt.format(user_input=\"海康威视\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 3.调用模型生成结果"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "ename": "NotImplementedError",
     "evalue": "Unsupported message type: <class 'langchain_core.prompts.chat.SystemMessagePromptTemplate'>\nFor troubleshooting, visit: https://python.langchain.com/docs/troubleshooting/errors/MESSAGE_COERCION_FAILURE ",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mNotImplementedError\u001b[0m                       Traceback (most recent call last)",
      "Cell \u001b[1;32mIn[29], line 1\u001b[0m\n\u001b[1;32m----> 1\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[43mchat\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43minvoke\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43minput\u001b[39;49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mmessages\u001b[49m\u001b[43m)\u001b[49m\n",
      "File \u001b[1;32mc:\\Users\\Jim\\.conda\\envs\\chat2money\\lib\\site-packages\\langchain_core\\language_models\\chat_models.py:287\u001b[0m, in \u001b[0;36mBaseChatModel.invoke\u001b[1;34m(self, input, config, stop, **kwargs)\u001b[0m\n\u001b[0;32m    275\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21minvoke\u001b[39m(\n\u001b[0;32m    276\u001b[0m     \u001b[38;5;28mself\u001b[39m,\n\u001b[0;32m    277\u001b[0m     \u001b[38;5;28minput\u001b[39m: LanguageModelInput,\n\u001b[1;32m   (...)\u001b[0m\n\u001b[0;32m    281\u001b[0m     \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs: Any,\n\u001b[0;32m    282\u001b[0m ) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m BaseMessage:\n\u001b[0;32m    283\u001b[0m     config \u001b[38;5;241m=\u001b[39m ensure_config(config)\n\u001b[0;32m    284\u001b[0m     \u001b[38;5;28;01mreturn\u001b[39;00m cast(\n\u001b[0;32m    285\u001b[0m         ChatGeneration,\n\u001b[0;32m    286\u001b[0m         \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mgenerate_prompt(\n\u001b[1;32m--> 287\u001b[0m             [\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_convert_input\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43minput\u001b[39;49m\u001b[43m)\u001b[49m],\n\u001b[0;32m    288\u001b[0m             stop\u001b[38;5;241m=\u001b[39mstop,\n\u001b[0;32m    289\u001b[0m             callbacks\u001b[38;5;241m=\u001b[39mconfig\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mcallbacks\u001b[39m\u001b[38;5;124m\"\u001b[39m),\n\u001b[0;32m    290\u001b[0m             tags\u001b[38;5;241m=\u001b[39mconfig\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mtags\u001b[39m\u001b[38;5;124m\"\u001b[39m),\n\u001b[0;32m    291\u001b[0m             metadata\u001b[38;5;241m=\u001b[39mconfig\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mmetadata\u001b[39m\u001b[38;5;124m\"\u001b[39m),\n\u001b[0;32m    292\u001b[0m             run_name\u001b[38;5;241m=\u001b[39mconfig\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mrun_name\u001b[39m\u001b[38;5;124m\"\u001b[39m),\n\u001b[0;32m    293\u001b[0m             run_id\u001b[38;5;241m=\u001b[39mconfig\u001b[38;5;241m.\u001b[39mpop(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mrun_id\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;28;01mNone\u001b[39;00m),\n\u001b[0;32m    294\u001b[0m             \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs,\n\u001b[0;32m    295\u001b[0m         )\u001b[38;5;241m.\u001b[39mgenerations[\u001b[38;5;241m0\u001b[39m][\u001b[38;5;241m0\u001b[39m],\n\u001b[0;32m    296\u001b[0m     )\u001b[38;5;241m.\u001b[39mmessage\n",
      "File \u001b[1;32mc:\\Users\\Jim\\.conda\\envs\\chat2money\\lib\\site-packages\\langchain_core\\language_models\\chat_models.py:267\u001b[0m, in \u001b[0;36mBaseChatModel._convert_input\u001b[1;34m(self, input)\u001b[0m\n\u001b[0;32m    265\u001b[0m     \u001b[38;5;28;01mreturn\u001b[39;00m StringPromptValue(text\u001b[38;5;241m=\u001b[39m\u001b[38;5;28minput\u001b[39m)\n\u001b[0;32m    266\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(\u001b[38;5;28minput\u001b[39m, Sequence):\n\u001b[1;32m--> 267\u001b[0m     \u001b[38;5;28;01mreturn\u001b[39;00m ChatPromptValue(messages\u001b[38;5;241m=\u001b[39m\u001b[43mconvert_to_messages\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43minput\u001b[39;49m\u001b[43m)\u001b[49m)\n\u001b[0;32m    268\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m    269\u001b[0m     msg \u001b[38;5;241m=\u001b[39m (\n\u001b[0;32m    270\u001b[0m         \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mInvalid input type \u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mtype\u001b[39m(\u001b[38;5;28minput\u001b[39m)\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m. \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m    271\u001b[0m         \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mMust be a PromptValue, str, or list of BaseMessages.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m    272\u001b[0m     )\n",
      "File \u001b[1;32mc:\\Users\\Jim\\.conda\\envs\\chat2money\\lib\\site-packages\\langchain_core\\messages\\utils.py:357\u001b[0m, in \u001b[0;36mconvert_to_messages\u001b[1;34m(messages)\u001b[0m\n\u001b[0;32m    355\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(messages, PromptValue):\n\u001b[0;32m    356\u001b[0m     \u001b[38;5;28;01mreturn\u001b[39;00m messages\u001b[38;5;241m.\u001b[39mto_messages()\n\u001b[1;32m--> 357\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m [_convert_to_message(m) \u001b[38;5;28;01mfor\u001b[39;00m m \u001b[38;5;129;01min\u001b[39;00m messages]\n",
      "File \u001b[1;32mc:\\Users\\Jim\\.conda\\envs\\chat2money\\lib\\site-packages\\langchain_core\\messages\\utils.py:357\u001b[0m, in \u001b[0;36m<listcomp>\u001b[1;34m(.0)\u001b[0m\n\u001b[0;32m    355\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(messages, PromptValue):\n\u001b[0;32m    356\u001b[0m     \u001b[38;5;28;01mreturn\u001b[39;00m messages\u001b[38;5;241m.\u001b[39mto_messages()\n\u001b[1;32m--> 357\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m [\u001b[43m_convert_to_message\u001b[49m\u001b[43m(\u001b[49m\u001b[43mm\u001b[49m\u001b[43m)\u001b[49m \u001b[38;5;28;01mfor\u001b[39;00m m \u001b[38;5;129;01min\u001b[39;00m messages]\n",
      "File \u001b[1;32mc:\\Users\\Jim\\.conda\\envs\\chat2money\\lib\\site-packages\\langchain_core\\messages\\utils.py:336\u001b[0m, in \u001b[0;36m_convert_to_message\u001b[1;34m(message)\u001b[0m\n\u001b[0;32m    334\u001b[0m     msg \u001b[38;5;241m=\u001b[39m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mUnsupported message type: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mtype\u001b[39m(message)\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m    335\u001b[0m     msg \u001b[38;5;241m=\u001b[39m create_message(message\u001b[38;5;241m=\u001b[39mmsg, error_code\u001b[38;5;241m=\u001b[39mErrorCode\u001b[38;5;241m.\u001b[39mMESSAGE_COERCION_FAILURE)\n\u001b[1;32m--> 336\u001b[0m     \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mNotImplementedError\u001b[39;00m(msg)\n\u001b[0;32m    338\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m _message\n",
      "\u001b[1;31mNotImplementedError\u001b[0m: Unsupported message type: <class 'langchain_core.prompts.chat.SystemMessagePromptTemplate'>\nFor troubleshooting, visit: https://python.langchain.com/docs/troubleshooting/errors/MESSAGE_COERCION_FAILURE "
     ]
    }
   ],
   "source": [
    "result = chat.invoke(input=messages) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [],
   "source": [
    "message = prompt.format(user_input=\"海康威视2022年业绩分析\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [],
   "source": [
    "result = chat.invoke(input=message)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'针对海康威视2022年的业绩分析，我们可以从以下几个方面来进行综合考量：\\n\\n1. **财务表现**：首先需要查看海康威视2022年的财报数据，包括但不限于营业收入、净利润及其增长率等关键指标。这些数据直接反映了公司在过去一年中的经营状况和盈利能力。同时也要关注毛利率、净利率等利润率的变化趋势，以及现金流状况。\\n\\n2. **市场地位与竞争环境**：了解海康威视在其所在行业（安防监控领域）的地位如何，是否有明显的竞争优势或劣势。此外，还需分析竞争对手的表现及整个行业的增长态势。\\n\\n3. **技术进步与创新**：对于高科技企业而言，持续的技术研发能力是其保持竞争力的关键。因此，应考察海康威视在2022年是否推出了新的产品或服务，研发投入占比是多少，以及这些努力对其业务产生了怎样的影响。\\n\\n4. **国际局势的影响**：鉴于当前复杂多变的国际形势，尤其是中美贸易关系对科技企业可能产生的影响，需评估此类外部因素对海康威视海外业务拓展的具体作用。\\n\\n5. **管理层决策**：公司高层的战略规划、决策方向也会极大程度上决定着企业的未来走向。可以关注一下管理层在过去一年里做了哪些重要决策，比如并购重组、战略调整等。\\n\\n基于以上几点进行深入研究后，才能给出更加具体的投资建议。但请注意，投资存在风险，任何决策都应基于充分的信息收集和个人情况考虑。如果条件允许的话，建议咨询专业的财经顾问以获得更个性化的指导。希望这些建议对你有所帮助！'"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "result.content   "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 更良好的做法\n",
    "chain = prompt | chat "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "AIMessage(content='针对您提到的两家公司——海康威视和大华股份，它们都是中国领先的安防视频监控产品和服务提供商。在考虑投资这两家公司之前，有几个方面值得考量：\\n\\n1. **行业地位**：海康威视与大华股份在全球安防领域均占据重要位置，特别是海康威视长期以来保持着行业领导者的角色。这反映了两家企业具有较强的市场竞争力。\\n\\n2. **技术创新能力**：随着人工智能、大数据等新技术的发展，安防行业的技术门槛不断提高。投资者需要关注这些企业在技术研发上的投入及其成果，比如智能分析算法的进步、新产品线的开发情况等。\\n\\n3. **财务状况**：查看最近几个季度或年度报告中的关键财务指标（如收入增长率、净利润率、现金流状态等），可以帮助评估企业的盈利能力及成长潜力。同时也要注意债务水平是否合理。\\n\\n4. **政策环境**：考虑到中美贸易摩擦等因素可能对出口导向型企业造成的影响，以及国内对于信息安全等方面的监管趋势变化，这些都是影响股价波动的重要因素之一。\\n\\n5. **国际形势**：由于这两家公司都有相当比例的海外业务，因此全球经济形势、地缘政治局势的变化也可能对其业绩产生影响。\\n\\n6. **ESG表现**：越来越多的投资者开始重视企业的环境、社会和治理（ESG）实践。良好的ESG记录不仅有助于提升品牌形象，还可能成为吸引长期价值投资者的关键因素。\\n\\n基于以上几点，建议您深入研究这两家公司的具体情况，并结合个人的投资目标、风险承受能力等因素作出决策。如果您更倾向于稳健增长型投资，那么选择行业内地位稳固、财务健康且注重可持续发展的企业可能是较好的选择；若您愿意承担更高风险以追求更高回报，则可以考虑那些正在快速扩张市场份额或者拥有突破性技术创新潜力的企业。当然，在做出任何投资决定前，请务必进行全面的信息收集与分析，并考虑咨询专业财务顾问的意见。', additional_kwargs={}, response_metadata={'model_name': 'qwen-max', 'finish_reason': 'stop', 'request_id': '3be255e0-2333-9cf6-804c-1ceffb9c33dc', 'token_usage': {'input_tokens': 56, 'output_tokens': 384, 'total_tokens': 440}}, id='run-bb8312b0-63fe-4375-b027-f85957907e73-0')"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 将提示词先传入prompt模板中，再传入chat中，最后返回\n",
    "chain.invoke(input={\"user_input\":\"海康威视，大华股份\"})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 4. 结果解析\n",
    "from langchain_core.output_parsers import StrOutputParser"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [],
   "source": [
    "output_parser = StrOutputParser()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [],
   "source": [
    "chain = prompt | chat | output_parser"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [],
   "source": [
    "result = chain.invoke(input={\"user_input\":\"光环国际, 北大青鸟\"})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'针对您提到的“光环国际”和“北大青鸟”，这两个名称通常与教育培训机构相关联。但是，请注意，直接投资于特定公司（尤其是非上市企业）可能并不总是可行或适合所有投资者。以下是对这两家机构背景以及如何考虑相关领域投资的一些建议：\\n\\n1. **了解行业背景**：首先需要对教育培训行业有一个全面的认识。近年来，在线教育、职业技能培训等领域发展迅速，但也面临着政策调整、市场竞争加剧等挑战。理解这些宏观因素对于做出明智的投资决策至关重要。\\n\\n2. **光环国际**：成立于2001年，是一家专注于项目管理及IT服务管理领域的专业培训机构。如果对其感兴趣，可以关注其在该细分市场的地位、增长潜力等因素。同时，也应考察同类竞争对手的表现以评估整个行业的健康状况。\\n\\n3. **北大青鸟**：成立于1999年，是由北京大学与印度阿波罗集团共同创办的信息技术职业教育机构。它在中国拥有广泛的分校网络，并且提供多种IT课程。对于这样的品牌来说，重要的是要分析其品牌影响力、教学质量、就业支持等方面的优势。\\n\\n4. **间接投资方式**：如果您希望通过股市参与这类企业的成长，但找不到直接途径的话，可以考虑投资于那些涵盖了教育科技或在线学习板块的ETF基金，或者寻找已经在证券交易所上市的相关公司股票进行研究。\\n\\n5. **风险提示**：任何投资都伴随着一定风险，特别是在快速变化且监管环境较为复杂的教育行业中。建议在做出决定前充分调研，并考虑咨询财务顾问的意见。\\n\\n6. **持续关注政策动态**：鉴于中国政府近年来对课外辅导市场的整顿措施，未来可能会有更多的政策出台影响整个行业格局。因此，保持对该领域最新消息的关注是非常必要的。\\n\\n总之，在考虑此类投资时，除了具体公司的基本面外，还需要综合考量宏观经济形势、行业发展前景等多个维度。希望这些建议能够帮助到您！如果有更具体的兴趣点或其他问题，欢迎继续交流。'"
      ]
     },
     "execution_count": 42,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "result"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 编写获取大模型的函数\n",
    "def get_qwen_models():\n",
    "    from langchain_community.llms.tongyi import Tongyi\n",
    "    llm = Tongyi(model=\"qwen-max\", temperature=0.1, top_p=0.7, max_tokens=512)\n",
    "    \n",
    "    from langchain_community.chat_models import ChatTongyi\n",
    "    chat = ChatTongyi(model=\"qwen-chat-7b\", temperature=0.1, top_p=0.7, max_tokens=512)\n",
    "    \n",
    "    from langchain_community.embeddings import DashScopeEmbeddings\n",
    "    embed = DashScopeEmbeddings(model=\"text-embedding-v3\")\n",
    "    \n",
    "    return llm, chat, embed"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "if __name__ == \"__main__\":\n",
    "    llm, chat, embed = get_qwen_models()\n",
    "    print(llm.invoke(\"你好\"))\n",
    "    print(chat.invoke(\"你好\"))\n",
    "    print(embed.invoke(\"你好\"))\n",
    "    "
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "chat2money",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.16"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
